home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / rpcproxy.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-09  |  16.6 KB  |  598 lines

  1. /*++
  2.  
  3. Copyright (c) 1992-1996 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     rpcproxy.h
  8.  
  9. Abstract:
  10.  
  11.     Definitions for rpc proxy  stubs.
  12.  
  13. Compiler switches:
  14.  
  15.     -DREGISTER_PROXY_DLL
  16.         Generates DllMain, DllRegisterServer, and DllUnregisterServer functions
  17.         for automatically registering a proxy DLL.
  18.  
  19.     -DPROXY_CLSID=clsid
  20.         Specifies a class ID to be used by the proxy DLL.
  21.  
  22.     -DPROXY_CLSID_IS={0x6f11fe5c,0x2fc5,0x101b,{0x9e,0x45,0x00,0x00,0x0b,0x65,0xc7,0xef}}
  23.         Specifies the value of the class ID to be used by the proxy DLL.
  24.  
  25.     -DNT35_STRICT
  26.         Specifies that the target platform is Windows NT 3.5. This switch disables
  27.         the new functions added after the Windows NT 3.5 release.
  28.  
  29. --*/
  30.  
  31. #ifndef __RPCPROXY_H__
  32. #define __RPCPROXY_H__
  33. #define __midl_proxy
  34. #pragma option push -b
  35.  
  36.  
  37. #ifndef INC_OLE2
  38. #define INC_OLE2
  39. #endif
  40.  
  41. #if defined(WIN32) || defined(_MPPC_)
  42.  
  43. //We need to define REFIID, REFCLSID, REFGUID, & REFFMTID here so that the
  44. //proxy code won't get the const GUID *const definition.
  45. #ifndef GUID_DEFINED
  46. #define GUID_DEFINED
  47. typedef struct _GUID
  48. {
  49.     unsigned long Data1;
  50.     unsigned short Data2;
  51.     unsigned short Data3;
  52.     unsigned char Data4[8];
  53. } GUID;
  54. #endif /* GUID_DEFINED */
  55.  
  56. #if !defined( __IID_DEFINED__ )
  57.     #define __IID_DEFINED__
  58.  
  59.     typedef GUID IID;
  60.     typedef IID *LPIID;
  61.     #define IID_NULL            GUID_NULL
  62.     #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
  63.     typedef GUID CLSID;
  64.     typedef CLSID *LPCLSID;
  65.     #define CLSID_NULL          GUID_NULL
  66.     #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
  67.     typedef GUID FMTID;
  68.     typedef FMTID *LPFMTID;
  69.     #define FMTID_NULL          GUID_NULL
  70.     #define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)
  71.  
  72.     #ifndef _REFGUID_DEFINED
  73.         #define _REFGUID_DEFINED
  74.         typedef const GUID *REFGUID;
  75.     #endif // !_REFGUID_DEFINED
  76.  
  77.     #ifndef _REFIID_DEFINED
  78.         #define _REFIID_DEFINED
  79.         typedef const IID *REFIID;
  80.     #endif // !_REFIID_DEFINED
  81.  
  82.     #ifndef _REFCLSID_DEFINED
  83.         #define _REFCLSID_DEFINED
  84.         typedef const CLSID *REFCLSID;
  85.     #endif // !_REFCLSID_DEFINED
  86.  
  87.     #ifndef _REFFMTID_DEFINED
  88.         #define _REFFMTID_DEFINED
  89.         typedef const FMTID *REFFMTID;
  90.     #endif // !_REFFMTID_DEFINED
  91.  
  92. #endif // !__IID_DEFINED__
  93.  
  94. // forward declarations
  95. struct tagCInterfaceStubVtbl;
  96. struct tagCInterfaceProxyVtbl;
  97.  
  98. typedef struct tagCInterfaceStubVtbl *  PCInterfaceStubVtblList;
  99. typedef struct tagCInterfaceProxyVtbl *  PCInterfaceProxyVtblList;
  100. typedef const char *                    PCInterfaceName;
  101. typedef int __stdcall IIDLookupRtn( const IID * pIID, int * pIndex );
  102. typedef IIDLookupRtn * PIIDLookup;
  103.  
  104. // pointers to arrays of CInterfaceProxyVtbl's and CInterfaceStubVtbls
  105. typedef struct tagProxyFileInfo
  106. {
  107.     const PCInterfaceProxyVtblList *pProxyVtblList;
  108.     const PCInterfaceStubVtblList *pStubVtblList;
  109.     const PCInterfaceName *     pNamesArray;
  110.     const IID **                pDelegatedIIDs;
  111.     const PIIDLookup            pIIDLookupRtn;
  112.     unsigned short              TableSize;
  113.     unsigned short              TableVersion;
  114.     unsigned long               Filler1;
  115.     unsigned long               Filler2;
  116.     unsigned long               Filler3;
  117.     unsigned long               Filler4;
  118. }ProxyFileInfo;
  119.  
  120. // extended info with list of interface names
  121. typedef ProxyFileInfo ExtendedProxyFileInfo;
  122.  
  123.  
  124. #include <rpc.h>
  125.  
  126.  
  127. #include <rpcndr.h>
  128.  
  129.  
  130. #include <string.h>
  131.  
  132.  
  133. #include <memory.h>
  134.  
  135.  
  136. typedef struct tagCInterfaceProxyHeader
  137. {
  138.     //
  139.     // New fields should be added here, at the beginning of the structure.
  140.     //
  141. #ifdef USE_STUBLESS_PROXY
  142.     const void *    pStublessProxyInfo;
  143. #endif
  144.     const IID *     piid;
  145. } CInterfaceProxyHeader;
  146.  
  147. // Macro used for ANSI compatible stubs.
  148.  
  149. #if defined(_MPPC_)
  150. #define CINTERFACE_PROXY_VTABLE( n )  \
  151. struct \
  152. {                                     \
  153.     CInterfaceProxyHeader header;     \
  154.     void * pDummyEntryForPowerMac;    \
  155.     void *Vtbl[ n ];                  \
  156. }
  157. #else
  158. #define CINTERFACE_PROXY_VTABLE( n )  \
  159. struct \
  160. {                                     \
  161.     CInterfaceProxyHeader header;     \
  162.     void *Vtbl[ n ];                  \
  163. }
  164. #endif
  165.  
  166. #pragma warning( disable:4200 )
  167. typedef struct tagCInterfaceProxyVtbl
  168. {
  169.     CInterfaceProxyHeader header;
  170. #if defined(_MPPC_)
  171.     void * pDummyEntryForPowerMac;
  172. #endif
  173. #if defined( _MSC_VER )
  174.     void *Vtbl[];
  175. #else
  176.     void *Vtbl[1];
  177. #endif
  178. } CInterfaceProxyVtbl;
  179. #pragma warning( default:4200 )
  180.  
  181. typedef
  182. void
  183. (__RPC_STUB __RPC_FAR * PRPC_STUB_FUNCTION) (
  184.     IRpcStubBuffer *This,
  185.     IRpcChannelBuffer * _pRpcChannelBuffer,
  186.     PRPC_MESSAGE _pRpcMessage,
  187.     DWORD __RPC_FAR *pdwStubPhase);
  188.  
  189. typedef struct tagCInterfaceStubHeader
  190. {
  191.     //New fields should be added here, at the beginning of the structure.
  192.     const IID *piid;
  193.     const MIDL_SERVER_INFO *pServerInfo;
  194.     unsigned long DispatchTableCount;
  195.     const PRPC_STUB_FUNCTION *pDispatchTable;
  196. } CInterfaceStubHeader;
  197.  
  198. typedef struct tagCInterfaceStubVtbl
  199. {
  200.     CInterfaceStubHeader header;
  201.     IRpcStubBufferVtbl Vtbl;
  202. } CInterfaceStubVtbl;
  203.  
  204. typedef struct tagCStdStubBuffer
  205. {
  206.     const struct IRpcStubBufferVtbl *   lpVtbl; //Points to Vtbl field in CInterfaceStubVtbl.
  207.     long                                RefCount;
  208.     struct IUnknown *                   pvServerObject;
  209. } CStdStubBuffer;
  210.  
  211. typedef struct tagCStdPSFactoryBuffer
  212. {
  213.     const IPSFactoryBufferVtbl *lpVtbl;
  214.     long                    RefCount;
  215.     const ProxyFileInfo **  pProxyFileList;
  216.     long                    Filler1;  //Reserved for future use.
  217. } CStdPSFactoryBuffer;
  218.  
  219. void RPC_ENTRY
  220. NdrProxyInitialize(
  221.     void *              This,
  222.     PRPC_MESSAGE        pRpcMsg,
  223.     PMIDL_STUB_MESSAGE  pStubMsg,
  224.     PMIDL_STUB_DESC     pStubDescriptor,
  225.     unsigned int        ProcNum );
  226.  
  227. void RPC_ENTRY
  228. NdrProxyGetBuffer(
  229.     void *              This,
  230.     PMIDL_STUB_MESSAGE pStubMsg);
  231.  
  232. void RPC_ENTRY
  233. NdrProxySendReceive(
  234.     void                *This,
  235.     MIDL_STUB_MESSAGE   *pStubMsg);
  236.  
  237. void RPC_ENTRY
  238. NdrProxyFreeBuffer(
  239.     void                *This,
  240.     MIDL_STUB_MESSAGE   *pStubMsg);
  241.  
  242. HRESULT RPC_ENTRY
  243. NdrProxyErrorHandler(
  244.     DWORD dwExceptionCode);
  245.  
  246. void RPC_ENTRY
  247. NdrStubInitialize(
  248.     PRPC_MESSAGE        pRpcMsg,
  249.     PMIDL_STUB_MESSAGE  pStubMsg,
  250.     PMIDL_STUB_DESC     pStubDescriptor,
  251.     IRpcChannelBuffer * pRpcChannelBuffer);
  252.  
  253. void __RPC_STUB NdrStubForwardingFunction(
  254.     IN  IRpcStubBuffer *    This,
  255.     IN  IRpcChannelBuffer * pChannel,
  256.     IN  PRPC_MESSAGE        pmsg,
  257.     OUT DWORD __RPC_FAR *   pdwStubPhase);
  258.  
  259. void RPC_ENTRY
  260. NdrStubGetBuffer(
  261.     IRpcStubBuffer *    This,
  262.     IRpcChannelBuffer * pRpcChannelBuffer,
  263.     PMIDL_STUB_MESSAGE  pStubMsg);
  264.  
  265. HRESULT RPC_ENTRY
  266. NdrStubErrorHandler(
  267.     DWORD dwExceptionCode);
  268.  
  269. HRESULT STDMETHODCALLTYPE
  270. CStdStubBuffer_QueryInterface(
  271.     IRpcStubBuffer *This,
  272.     REFIID riid,
  273.     void **ppvObject);
  274.  
  275. ULONG STDMETHODCALLTYPE
  276. CStdStubBuffer_AddRef(
  277.     IRpcStubBuffer *This);
  278.  
  279. ULONG STDMETHODCALLTYPE
  280. CStdStubBuffer_Release(
  281.     IRpcStubBuffer *This);
  282.  
  283. ULONG STDMETHODCALLTYPE
  284. NdrCStdStubBuffer_Release(
  285.     IRpcStubBuffer *This,
  286.     IPSFactoryBuffer * pPSF);
  287.  
  288. HRESULT STDMETHODCALLTYPE
  289. CStdStubBuffer_Connect(
  290.     IRpcStubBuffer *This,
  291.     IUnknown *pUnkServer);
  292.  
  293. void STDMETHODCALLTYPE
  294. CStdStubBuffer_Disconnect(
  295.     IRpcStubBuffer *This);
  296.  
  297. HRESULT STDMETHODCALLTYPE
  298. CStdStubBuffer_Invoke(
  299.     IRpcStubBuffer *This,
  300.     RPCOLEMESSAGE *pRpcMsg,
  301.     IRpcChannelBuffer *pRpcChannelBuffer);
  302.  
  303. IRpcStubBuffer * STDMETHODCALLTYPE
  304. CStdStubBuffer_IsIIDSupported(
  305.     IRpcStubBuffer *This,
  306.     REFIID riid);
  307.  
  308. ULONG STDMETHODCALLTYPE
  309. CStdStubBuffer_CountRefs(
  310.     IRpcStubBuffer *This);
  311.  
  312. HRESULT STDMETHODCALLTYPE
  313. CStdStubBuffer_DebugServerQueryInterface(
  314.     IRpcStubBuffer *This,
  315.     void **ppv);
  316.  
  317. void STDMETHODCALLTYPE
  318. CStdStubBuffer_DebugServerRelease(
  319.     IRpcStubBuffer *This,
  320.     void *pv);
  321.  
  322. #if defined(_MPPC_)
  323. #define CStdStubBuffer_METHODS \
  324.     0,  /* a PowerMac dummy */  \
  325.     CStdStubBuffer_QueryInterface,\
  326.     CStdStubBuffer_AddRef, \
  327.     CStdStubBuffer_Release, \
  328.     CStdStubBuffer_Connect, \
  329.     CStdStubBuffer_Disconnect, \
  330.     CStdStubBuffer_Invoke, \
  331.     CStdStubBuffer_IsIIDSupported, \
  332.     CStdStubBuffer_CountRefs, \
  333.     CStdStubBuffer_DebugServerQueryInterface, \
  334.     CStdStubBuffer_DebugServerRelease
  335. #else
  336. #define CStdStubBuffer_METHODS \
  337.     CStdStubBuffer_QueryInterface,\
  338.     CStdStubBuffer_AddRef, \
  339.     CStdStubBuffer_Release, \
  340.     CStdStubBuffer_Connect, \
  341.     CStdStubBuffer_Disconnect, \
  342.     CStdStubBuffer_Invoke, \
  343.     CStdStubBuffer_IsIIDSupported, \
  344.     CStdStubBuffer_CountRefs, \
  345.     CStdStubBuffer_DebugServerQueryInterface, \
  346.     CStdStubBuffer_DebugServerRelease
  347. #endif
  348.  
  349. //+-------------------------------------------------------------------------
  350. //
  351. //  Macro definitions for the proxy file
  352. //
  353. //--------------------------------------------------------------------------
  354.  
  355. #define IID_GENERIC_CHECK_IID(name,pIID,index) memcmp( pIID, name##_ProxyVtblList[ index ]->header.piid, 16 )
  356.  
  357. #define IID_BS_LOOKUP_SETUP     int result, low=-1;
  358.  
  359. #define IID_BS_LOOKUP_INITIAL_TEST(name, sz, split)   \
  360.     if ( ( result = name##_CHECK_IID( split ) ) > 0 ) \
  361.         { low = sz - split; }                      \
  362.     else if ( !result )                               \
  363.         { low = split; goto found_label; }
  364.  
  365. #define IID_BS_LOOKUP_NEXT_TEST(name, split )         \
  366.     if ( ( result = name##_CHECK_IID( low + split )) >= 0 )  \
  367.         { low = low + split; if ( !result ) goto found_label; }
  368.  
  369. #define IID_BS_LOOKUP_RETURN_RESULT(name, sz, index )                  \
  370.     low = low + 1;                                          \
  371.     if ( ( low >= sz ) || (result = name##_CHECK_IID( low ) )) goto not_found_label; \
  372.     found_label: (index) = low; return 1;                         \
  373.     not_found_label: return 0;
  374.  
  375. //+-------------------------------------------------------------------------
  376. //
  377. //  Macro and routine definitions for the dlldata file
  378. //
  379. //--------------------------------------------------------------------------
  380.  
  381. /****************************************************************************
  382.  * Proxy Dll APIs
  383.  ****************************************************************************/
  384.  
  385. HRESULT RPC_ENTRY
  386. NdrDllGetClassObject (
  387.     IN  REFCLSID                rclsid,
  388.     IN  REFIID                  riid,
  389.     OUT void **                 ppv,
  390.     IN const ProxyFileInfo **   pProxyFileList,
  391.     IN const CLSID *            pclsid,
  392.     IN CStdPSFactoryBuffer *    pPSFactoryBuffer);
  393.  
  394. HRESULT RPC_ENTRY
  395. NdrDllCanUnloadNow(
  396.     IN CStdPSFactoryBuffer * pPSFactoryBuffer);
  397.  
  398. /*************************************************************************
  399. The following new functions were added after the Windows NT 3.5 release.
  400. Programs intended to run on Windows NT 3.5 should define NT35_STRICT to
  401. ensure that no new functions are used.
  402. *************************************************************************/
  403. #ifndef NT35_STRICT
  404.  
  405. HRESULT RPC_ENTRY NdrDllRegisterProxy(
  406.     IN HMODULE                  hDll,
  407.     IN const ProxyFileInfo **   pProxyFileList,
  408.     IN const CLSID *            pclsid);
  409.  
  410. HRESULT RPC_ENTRY NdrDllUnregisterProxy(
  411.     IN HMODULE                  hDll,
  412.     IN const ProxyFileInfo **   pProxyFileList,
  413.     IN const CLSID *            pclsid);
  414.  
  415.  
  416. #define REGISTER_PROXY_DLL_ROUTINES(pProxyFileList, pClsID) \
  417.     \
  418.     HINSTANCE hProxyDll = 0; \
  419.     \
  420.     /*DllMain saves the DLL module handle for later use by DllRegisterServer */ \
  421.     BOOL WINAPI DllMain( \
  422.         HINSTANCE  hinstDLL, \
  423.         DWORD  fdwReason, \
  424.         LPVOID  lpvReserved) \
  425.     { \
  426.         if(fdwReason == DLL_PROCESS_ATTACH) \
  427.             hProxyDll = hinstDLL; \
  428.         return TRUE; \
  429.     } \
  430.     \
  431.     /* DllRegisterServer registers the interfaces contained in the proxy DLL. */ \
  432.     HRESULT STDAPICALLTYPE DllRegisterServer() \
  433.     { \
  434.         return NdrDllRegisterProxy(hProxyDll, pProxyFileList, pClsID); \
  435.     }  \
  436.     \
  437.     /* DllUnregisterServer unregisters the interfaces contained in the proxy DLL. */ \
  438.     HRESULT STDAPICALLTYPE DllUnregisterServer() \
  439.     { \
  440.         return NdrDllUnregisterProxy(hProxyDll, pProxyFileList, pClsID); \
  441.     }
  442.  
  443. //Delegation support.
  444. #define STUB_FORWARDING_FUNCTION        NdrStubForwardingFunction
  445.  
  446. ULONG STDMETHODCALLTYPE
  447. CStdStubBuffer2_Release(IRpcStubBuffer *This);
  448.  
  449. ULONG STDMETHODCALLTYPE
  450. NdrCStdStubBuffer2_Release(IRpcStubBuffer *This,IPSFactoryBuffer * pPSF);
  451.  
  452. #define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0
  453.  
  454. #endif //NT35_STRICT
  455. /*************************************************************************
  456. End of new functions.
  457. *************************************************************************/
  458.  
  459. // PROXY_CLSID has precedence over PROXY_CLSID_IS
  460.  
  461. #ifdef PROXY_CLSID
  462.  
  463. #define CLSID_PSFACTORYBUFFER extern CLSID PROXY_CLSID;
  464.  
  465. #else // PROXY_CLSID
  466.  
  467. #ifdef PROXY_CLSID_IS
  468. #define CLSID_PSFACTORYBUFFER const CLSID CLSID_PSFactoryBuffer = PROXY_CLSID_IS;
  469. #define PROXY_CLSID     CLSID_PSFactoryBuffer
  470. #else // PROXY_CLSID_IS
  471. #define CLSID_PSFACTORYBUFFER
  472. #endif //PROXY_CLSID_IS
  473.  
  474. #endif //PROXY_CLSID
  475.  
  476. // if the user specified an override for the class id, it is
  477. // PROXY_CLSID at this point
  478.  
  479. #ifndef PROXY_CLSID
  480. #define GET_DLL_CLSID   \
  481.     ( aProxyFileList[0]->pStubVtblList[0] != 0 ? \
  482.     aProxyFileList[0]->pStubVtblList[0]->header.piid : 0)
  483. #else  //PROXY_CLSID
  484. #define GET_DLL_CLSID   &PROXY_CLSID
  485. #endif //PROXY_CLSID
  486.  
  487.  
  488.  
  489.  
  490. #define EXTERN_PROXY_FILE(name) \
  491.     EXTERN_C const ProxyFileInfo name##_ProxyFileInfo;
  492.  
  493. #define PROXYFILE_LIST_START    \
  494.     const ProxyFileInfo  *  aProxyFileList[]    = {
  495.  
  496. #define REFERENCE_PROXY_FILE(name)  \
  497.     & name##_ProxyFileInfo
  498.  
  499. #define PROXYFILE_LIST_END      \
  500.     0 };
  501.  
  502. // return pointers to the class information
  503.  
  504. #define DLLDATA_GETPROXYDLLINFO(pPFList,pClsid) \
  505.     void RPC_ENTRY GetProxyDllInfo( const ProxyFileInfo*** pInfo, const CLSID ** pId )  \
  506.         {   \
  507.         *pInfo  = pPFList;  \
  508.         *pId    = pClsid;   \
  509.         };
  510.  
  511. // ole entry points:
  512. #define DLLGETCLASSOBJECTROUTINE(pPFlist, pClsid,pFactory)    \
  513.  HRESULT STDAPICALLTYPE DllGetClassObject ( \
  514.      REFCLSID rclsid, \
  515.      REFIID riid, \
  516.      void ** ppv ) \
  517.         { \
  518.         return  \
  519.             NdrDllGetClassObject(rclsid,riid,ppv,pPFlist,pClsid,pFactory ); \
  520.         }
  521.  
  522. #define DLLCANUNLOADNOW(pFactory)   \
  523.  HRESULT STDAPICALLTYPE DllCanUnloadNow()    \
  524.     {   \
  525.     return NdrDllCanUnloadNow( pFactory );    \
  526.     }
  527.  
  528.  
  529. #define DLLDUMMYPURECALL    \
  530.     void __cdecl _purecall(void)    \
  531.         {   \
  532.         }
  533.  
  534. #define CSTDSTUBBUFFERRELEASE(pFactory)   \
  535. ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer *This) \
  536.     {   \
  537.     return NdrCStdStubBuffer_Release(This,(IPSFactoryBuffer *)pFactory);   \
  538.     }   \
  539.  
  540. #ifdef PROXY_DELEGATION
  541. #define CSTDSTUBBUFFER2RELEASE(pFactory)   \
  542. ULONG STDMETHODCALLTYPE CStdStubBuffer2_Release(IRpcStubBuffer *This) \
  543.     {   \
  544.     return NdrCStdStubBuffer2_Release(This,(IPSFactoryBuffer *)pFactory);   \
  545.     }
  546. #else
  547. #define CSTDSTUBBUFFER2RELEASE(pFactory)
  548. #endif //PROXY_DELEGATION
  549.  
  550.  
  551. #ifdef REGISTER_PROXY_DLL
  552. #define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID ) REGISTER_PROXY_DLL_ROUTINES(pProxyFileList,pClsID )
  553. #else
  554. #define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID )
  555. #endif //REGISTER_PROXY_DLL
  556.  
  557.  
  558. // the dll entry points that must be defined
  559. #define DLLDATA_ROUTINES(pProxyFileList,pClsID )    \
  560.     \
  561.     CLSID_PSFACTORYBUFFER \
  562.     \
  563.     CStdPSFactoryBuffer       gPFactory = {0,0,0,0};  \
  564.     \
  565.     DLLDATA_GETPROXYDLLINFO(pProxyFileList,pClsID) \
  566.     \
  567.     DLLGETCLASSOBJECTROUTINE(pProxyFileList,pClsID,&gPFactory)    \
  568.     \
  569.     DLLCANUNLOADNOW(&gPFactory)   \
  570.     \
  571.     CSTDSTUBBUFFERRELEASE(&gPFactory)   \
  572.     \
  573.     CSTDSTUBBUFFER2RELEASE(&gPFactory) \
  574.     \
  575.     DLLDUMMYPURECALL    \
  576.     \
  577.     DLLREGISTRY_ROUTINES(pProxyFileList, pClsID) \
  578.     \
  579.  
  580.     // more code goes here...
  581.  
  582.  
  583. #define DLLDATA_STANDARD_ROUTINES   \
  584.     DLLDATA_ROUTINES( (const ProxyFileInfo**) pProxyFileList, &CLSID_PSFactoryBuffer )  \
  585.  
  586. #else  // !defined(__RPC_DOS__) && !defined(__RPC_WIN16__)
  587.  
  588. //+-------------------------------------------------------------------------
  589. //
  590. //  16-bit definitions (all empty)
  591. //
  592. //--------------------------------------------------------------------------
  593.  
  594. #endif // WIN32 or _MPPC_
  595.  
  596. #pragma option pop
  597. #endif // __RPCPROXY_H__
  598.